﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cesave.DistributedServices.PermisosModule.WindowsHost.ViewModelBase;
using Cesave.DistributedServices.PermisosModule.WindowsHost.Views.Catalogs.VariedadesGrupos;
using System.Windows.Forms;
using Cesave.DistributedServices.PermisosModule.WindowsHost.Resources;
using System.Globalization;

namespace Cesave.DistributedServices.PermisosModule.WindowsHost.ViewModels.Catalogs.VariedadesGrupos
{
    /// <summary>
    /// Modelo del catálogo de grupos de variedades.
    /// </summary>
    public partial class VariedadesGruposViewModel
        : ObservableObject
    {
        #region Private properties

        /// <summary>
        /// Vista del catálogo de grupos de variedades.
        /// </summary>
        private VariedadesGruposView _view;

        #endregion

        #region Constructor

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="view">
        /// Vista del catálogo de grupos de variedades.
        /// </param>
        public VariedadesGruposViewModel(VariedadesGruposView view)
        {
            if (view == null)
                throw new ArgumentNullException("view");
            _view = view;
            WireUpEvents();
            InitModels();
        }

        #endregion

        #region Event methods

        /// <summary>
        /// Suscribe varios elementos de la vista a diferentes eventos.
        /// </summary>
        private void WireUpEvents()
        {
            PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(VariedadesGruposViewModel_PropertyChanged);
            _view.Load += LoadView;
            _view.closeButton.Click += (sender, e) =>
            {
                _view.Close();
            };
			_view.newButton.Click += AddNewGrupo;
			_view.bindingNavigatorAddNewItem.Click += AddNewGrupo;
			_view.saveButton.Click += SaveGrupos;
			_view.variedadesGrupoBindingNavigatorSaveItem.Click += SaveGrupos;
        }

        /// <summary>
        /// Se ejecuta al cargarse la vista.
        /// </summary>
        private void LoadView(object sender, EventArgs e)
        {
            _view.Text = string.Format(
                CultureInfo.InvariantCulture,
                WindowTitles.VariedadesGruposWindowTitle
            );
        }

        #endregion

        #region Private methods

        /// <summary>
        /// Carga los modelos principales de la vista.
        /// </summary>
        private void InitModels()
        {
            LoadCultivos();
        }

        /// <summary>
        /// Inicializa la barra de espera.
        /// </summary>
        private void StartWaiting()
        {
            _view.WaitingBar.StartWaiting();
        }


        /// <summary>
        /// Termina la barra de espera.
        /// </summary>
        private void EndWaiting()
        {
            _view.WaitingBar.EndWaiting();
        }

        /// <summary>
        /// Muestra un mensaje al usuario.
        /// </summary>
        /// <param name="message">
        /// Mensaje a mostrar.
        /// </param>
        private void ShowMessage(string message)
        {
            MessageBox.Show(
                _view,
                message,
                WindowTitles.VariedadesGruposWindowTitle,
                MessageBoxButtons.OK,
                MessageBoxIcon.Error
            );
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="control"></param>
        private void FocusDefaultControl(Control control = null)
        {
            if (control == null)
                control = _view.nombreTextBox;
            _view.ActiveControl = control;
        }

        #endregion

    }
}
